import { getToken, removeToken } from '@/utils/storage'

const baseUrl = process.env.VITE_BASE_URL

interface RequestOptions {
	url: string
	method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
	header?: any
	data?: any
}

function service(options: RequestOptions) {
	options.url = `${baseUrl}${options.url}`
	if (getToken()) {
		options.header = {
			'content-type': 'application/json',
			Authorization: `${getToken()}`,
		}
	}
	return new Promise((resolved, rejected) => {
		uni.request({
			url: options.url,
			method: options.method || 'GET',
			data: options.data || {},
			header: options.header,
			success(res: any) {
				// 如果请求回来的状态码不是200则执行以下操作
				if (res.data.code !== 200) {
					// 非成功状态码弹窗
					uni.showToast({
						icon: 'none',
						duration: 3000,
						title: `${res.data.msg}`,
					})
					// 登陆失效
					if (res.data.code === 403) {
						// 清除本地token
						removeToken()
						// 关闭所有页面返回到登录页
						uni.reLaunch({
							url: '/pages/login/login',
						})
					}
					// 返回错误信息
					rejected(res)
				} else {
					// 请求回来的状态码为200则返回内容
					resolved(res.data.data)
				}
			},
			fail(err: any) {
				// 请求失败弹窗
				uni.showToast({
					icon: 'none',
					duration: 3000,
					title: '服务器错误,请稍后再试',
				})
				rejected(err)
			},
		})
	})
}

export const request = service
